#include<bits/stdc++.h>

using namespace std;
int a[100];
int n = 3;
int dp[500];

void dfs(int k) {
    //前k个数的和不小于n就要退出
    int s = 0;
    for (int i = 0; i < k; i++) {
        s += a[i];
    }
    if (s >= n) {
        if (s == n) {
            //n=a[0]+a[1]+a[2]+..+a[k-1]
            int tot = 0, b = a[0];
            for (int i = 1; i <= k - 1; i++) {
                tot += b * a[i];
                b += a[i];
            }
            dp[tot] = 1;

        }
        return;
    }

    for (int i = n; i >= 1; i--) {
        if (k >= 1 && i > a[k - 1])continue;
        a[k] = i;
        dfs(k + 1);
    }
}


int main() {
    while (cin >> n) {
        memset(dp, 0, sizeof(dp));
        dfs(0);
        for (int i = 0; i <= 500; i++) {
            if (dp[i] == 1) {
                cout << i << " ";
            }
        }
        cout << endl;

    }


    return 0;
}